<?php
require '../includes/LITTLE_ChukuExcelReader.class.php';
require '../includes/functions.inc.php';

ini_set("max_execution_time",0);
ini_set( "memory_limit" , "128M");

$smarty = SmartyManager::getSmarty();

/*************************************************************
 * 每个上传文件只要修改下面这些变量就基本可以了
 ************************************************************/
$formFilename = 'chukuFile';

//不可缺少的列
$obligatoCols = array(
	'出库日期','产品质量证明书号','产品质量证明书编号','经手人','备注一','备注二');

//电子表格和数据库表中的列的对应关系
$tableCols = array(
		'出库日期' 		=> 	'chukuDate',
		'产品质量证明书号' 		=> 	'certificationNumber',
		'产品质量证明书编号' 	=> 	'certificationCodification',
		'经手人' 		=> 	'handler',
		'备注一' 		=> 	'remark1',
		'备注二' 		=> 	'remark2'
);

//对比时用来比较的列
$compareCols = array(
	'certificationNumber'
);

$tableName = 'little_chuku';

/************************************************************
 * 文件上传
 ***********************************************************/
try{
	//$file 在本程序中用作了全局变量，用来在需要filename的函数中使用
	$file = saveUploadedFile($formFilename);
}catch(Exception $e){
	$smarty->assign('errMsg', $e);
	$smarty->display('error.html');
	exit();
}

try{
	beginTransaction();
	$littleReader = new LITTLE_ChukuExcelReader();
	$littleReader->read($file->getNewPath());

	$littleReader->obligatoColumns = $obligatoCols;
	$littleReader->tableColumns = $tableCols;
	$littleReader->compareColumns = $compareCols;
	$littleReader->tableName = $tableName;

	$littleReader->checkFirstRow('chuku');
	if($date = $littleReader->myHaveUploaded()){
		throw new UploadSameFileException($file->getFilename(), $date);
	}
	if(($havenot = $littleReader->getMyHaveNotUploadedCertificationNumber()) != null){
		throw new HaveNotUploadedCertificationNumber($havenot);
	}
		
	//同一个表格中不能有相同的产品质量证明书号
	if(($cns = $littleReader->haveSameCertificationNumber())!=false){
		$errMsg = "但是，程序检查到上传的文件中有重复的产品质量证明书号：'".join("', '", $cns)."', 如果你确认这里出现了问题，可以直接在系统中进行修改或者删除刚才上传的文件";
		throw new SameCertificationNumber($errMsg);
	}
	
	//产品质量证明书号已经上传过
	$cns = $littleReader->getCertificationNumberArray();
	if(($uploadedCns = $littleReader->isCertificationNumberUploaded($cns))!=false){
		throw new UploadedSameCertificationNumber($uploadedCns);
	}
	
	//相同产品质量证明书号的产品质量证明书编号是否和入库中的一样
	$littleReader->checkCertificationCodification();
	
	$littleReader->saveFileInfo();
	$littleReader->myReadIntoDB();
	LogInserter::logForInsert("导入出库文件：{$file->getFilename()}");
	
}catch(DBQueryException $e){
	$smarty->assign('errMsg', $e);
	$smarty->display('error.html');
	rollback();
	exit();
}catch(Exception $e){
	$smarty->assign('errMsg', $e);
	$smarty->display('error.html');
	rollback();
	exit();
}

$smarty->assign('successMsg', $file->getFilename().'上传成功');
if(isset($warnMsg)){
	$smarty->assign('warnMsg', $warnMsg);
}
$smarty->display('success.html');
commit();
?>